package ar.com.larreta.persistencia;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;

import ar.com.larreta.excepciones.Excepcion;
import ar.com.larreta.procesos.AdministradorDeProcesos;

public class FabricaDeBeansDinamicos extends AnnotationSessionFactoryBean {
	
	protected static Logger logger = Logger.getLogger(FabricaDeBeansDinamicos.class);

	public static String CLASE = "clase.";
	
	public FabricaDeBeansDinamicos() {
		super();
		Collection<Class> listaClases = new ArrayList<Class>();
		try {
			Properties properties = AdministradorDeProcesos.getInstancia(null).getPropiedades();
			Integer indice = 1;
			String nombreClase = (String) properties.get(CLASE + indice);
			while (nombreClase!=null){
				listaClases.add(Class.forName(nombreClase));
				indice++;
				nombreClase = (String) properties.get(CLASE + indice);
			}
		} catch (Exception e){
			logger.error(Excepcion.getStackTrace(e));
		}
		
		// Necesario ya que aparentemente no se puede transformar una collection a un array de Class
		Class[] arrayClass = new Class[listaClases.size()];
		Integer indice = 0;
		Iterator<Class> it = listaClases.iterator();
		while (indice < listaClases.size()){
			arrayClass[indice] = it.next();
			indice++;
		}
		super.setAnnotatedClasses(arrayClass);
	}

}
